import pygame
from pygame.locals import *
from sys import exit
import os  
from datetime import datetime
class Player:
    def __init__(self,opcao,direcao,x,y,id_player):
        self.speed = 2
        self.posicaox = x
        self.posicaoy = y
        self.posicx_reset = x
        self.posicy_reset = y
        self.vidas = 3
        self.direcao = direcao
        self.estado = 0
        self.opcao = opcao
        self.qntidade_bombas = 1
        self.bombas_soltas = []
        self.vivo = True
        self.tempo_morte = 0
        self.potencia = 1
        self.id_player = id_player
        self.pontos = 0

        
        if self.opcao == 1:
            self.personagem = "lady"
            self.width_player = 30
            self.height_player = 30
            self.rectPlayer = pygame.Rect(self.posicaox,self.posicaoy+10,self.width_player,self.height_player)
            self.rectPos = pygame.Rect(self.posicaox+15,self.posicaoy+15,5,5)
            self.imagem_display = pygame.image.load("img"+ os.sep + self.personagem + os.sep + "display.png")
            self.qntidade_bombas = 3
            
        elif self.opcao == 2:
            self.personagem = "jet"
            self.width_player = 30
            self.height_player = 30
            self.rectPlayer = pygame.Rect(self.posicaox,self.posicaoy+10,self.width_player,self.height_player)
            self.rectPos = pygame.Rect(self.posicaox+15,self.posicaoy+15,5,5)
            self.imagem_display = pygame.image.load("img"+ os.sep + self.personagem + os.sep + "display.png")
            self.speed = 4
            
        elif self.opcao == 3:
            self.personagem = "white"
            self.width_player = 30
            self.height_player = 30
            self.rectPlayer = pygame.Rect(self.posicaox,self.posicaoy+20,self.width_player,self.height_player)
            self.rectPos = pygame.Rect(self.posicaox+15,self.posicaoy+15,5,5)
            self.imagem_display = pygame.image.load("img"+ os.sep + self.personagem + os.sep + "display.png")
            self.potencia = 3
            
            
        self.imagens_cima = ["andar_cima1.png","andar_cima1.png","andar_cima1.png","andar_cima1.png","andar_cima1.png","andar_cima1.png","andar_cima1.png","andar_cima1.png","andar_cima1.png","andar_cima1.png",
                             "andar_cima2.png","andar_cima2.png","andar_cima2.png","andar_cima2.png","andar_cima2.png","andar_cima2.png","andar_cima2.png","andar_cima2.png","andar_cima2.png","andar_cima2.png",
                             "andar_cima3.png","andar_cima3.png","andar_cima3.png","andar_cima3.png","andar_cima3.png","andar_cima3.png","andar_cima3.png","andar_cima3.png","andar_cima3.png","andar_cima3.png",
                             "andar_cima4.png","andar_cima4.png","andar_cima4.png","andar_cima4.png","andar_cima4.png","andar_cima4.png","andar_cima4.png","andar_cima4.png","andar_cima4.png","andar_cima4.png",
                             "andar_cima5.png","andar_cima5.png","andar_cima5.png","andar_cima5.png","andar_cima5.png","andar_cima5.png","andar_cima5.png","andar_cima5.png","andar_cima5.png","andar_cima5.png"]
        self.imagens_esquerda = ["andar_esquerda1.png","andar_esquerda1.png","andar_esquerda1.png","andar_esquerda1.png","andar_esquerda1.png","andar_esquerda1.png","andar_esquerda1.png","andar_esquerda1.png","andar_esquerda1.png","andar_esquerda1.png",
                                 "andar_esquerda2.png","andar_esquerda2.png","andar_esquerda2.png","andar_esquerda2.png","andar_esquerda2.png","andar_esquerda2.png","andar_esquerda2.png","andar_esquerda2.png","andar_esquerda2.png","andar_esquerda2.png",
                                 "andar_esquerda3.png","andar_esquerda3.png","andar_esquerda3.png","andar_esquerda3.png","andar_esquerda3.png","andar_esquerda3.png","andar_esquerda3.png","andar_esquerda3.png","andar_esquerda3.png","andar_esquerda3.png",
                                 "andar_esquerda4.png","andar_esquerda4.png","andar_esquerda4.png","andar_esquerda4.png","andar_esquerda4.png","andar_esquerda4.png","andar_esquerda4.png","andar_esquerda4.png","andar_esquerda4.png","andar_esquerda4.png",
                                 "andar_esquerda5.png","andar_esquerda5.png","andar_esquerda5.png","andar_esquerda5.png","andar_esquerda5.png","andar_esquerda5.png","andar_esquerda5.png","andar_esquerda5.png","andar_esquerda5.png","andar_esquerda5.png"]

        self.imagens_direita = ["andar_direita1.png", "andar_direita1.png", "andar_direita1.png", "andar_direita1.png", "andar_direita1.png", "andar_direita1.png", "andar_direita1.png", "andar_direita1.png", "andar_direita1.png", "andar_direita1.png", "andar_direita1.png",
                                "andar_direita2.png", "andar_direita2.png", "andar_direita2.png", "andar_direita2.png", "andar_direita2.png", "andar_direita2.png", "andar_direita2.png", "andar_direita2.png", "andar_direita2.png", "andar_direita2.png", "andar_direita2.png",
                                "andar_direita3.png", "andar_direita3.png", "andar_direita3.png", "andar_direita3.png", "andar_direita3.png", "andar_direita3.png", "andar_direita3.png", "andar_direita3.png", "andar_direita3.png", "andar_direita3.png", "andar_direita3.png",
                                "andar_direita4.png", "andar_direita4.png", "andar_direita4.png", "andar_direita4.png", "andar_direita4.png", "andar_direita4.png", "andar_direita4.png", "andar_direita4.png", "andar_direita4.png", "andar_direita4.png", "andar_direita4.png",
                                "andar_direita5.png", "andar_direita5.png", "andar_direita5.png", "andar_direita5.png", "andar_direita5.png", "andar_direita5.png", "andar_direita5.png", "andar_direita5.png", "andar_direita5.png", "andar_direita5.png", "andar_direita5.png"]

        self.imagens_baixo = ["andar_baixo1.png", "andar_baixo1.png", "andar_baixo1.png", "andar_baixo1.png", "andar_baixo1.png", "andar_baixo1.png", "andar_baixo1.png", "andar_baixo1.png", "andar_baixo1.png", "andar_baixo1.png", "andar_baixo1.png", 
                              "andar_baixo2.png", "andar_baixo2.png", "andar_baixo2.png", "andar_baixo2.png", "andar_baixo2.png", "andar_baixo2.png", "andar_baixo2.png", "andar_baixo2.png", "andar_baixo2.png", "andar_baixo2.png", "andar_baixo2.png", 
                              "andar_baixo3.png", "andar_baixo3.png", "andar_baixo3.png", "andar_baixo3.png", "andar_baixo3.png", "andar_baixo3.png", "andar_baixo3.png", "andar_baixo3.png", "andar_baixo3.png", "andar_baixo3.png", "andar_baixo3.png", 
                              "andar_baixo4.png", "andar_baixo4.png", "andar_baixo4.png", "andar_baixo4.png", "andar_baixo4.png", "andar_baixo4.png", "andar_baixo4.png", "andar_baixo4.png", "andar_baixo4.png", "andar_baixo4.png", "andar_baixo4.png", 
                              "andar_baixo5.png", "andar_baixo5.png", "andar_baixo5.png", "andar_baixo5.png", "andar_baixo5.png", "andar_baixo5.png", "andar_baixo5.png", "andar_baixo5.png", "andar_baixo5.png", "andar_baixo5.png", "andar_baixo5.png"]

    def imagem(self):
        if self.direcao == 0:
            self.bomber = pygame.image.load("img"+ os.sep + self.personagem + os.sep + self.imagens_cima[self.estado]).convert_alpha()
        elif self.direcao == 1:
            self.bomber = pygame.image.load("img"+ os.sep + self.personagem + os.sep + self.imagens_baixo[self.estado]).convert_alpha()
        elif self.direcao == 2:
            self.bomber = pygame.image.load("img"+ os.sep + self.personagem + os.sep + self.imagens_direita[self.estado]).convert_alpha()
        elif self.direcao == 3:
            self.bomber = pygame.image.load("img"+ os.sep + self.personagem + os.sep + self.imagens_esquerda[self.estado]).convert_alpha()
        
        return self.bomber

    def parado(self):
        if self.direcao == 0:
            self.bomber = pygame.image.load("img"+ os.sep + self.personagem + os.sep +"parado_cima.png").convert_alpha()
        elif self.direcao == 1:
            self.bomber = pygame.image.load("img"+ os.sep + self.personagem + os.sep + "parado_baixo.png").convert_alpha()
        elif self.direcao == 2:
            self.bomber = pygame.image.load("img"+ os.sep + self.personagem + os.sep + "parado_direita.png").convert_alpha()
        elif self.direcao == 3:
            self.bomber = pygame.image.load("img"+ os.sep + self.personagem + os.sep + "parado_esquerda.png").convert_alpha()
        if not self.vivo:
            self.bomber = pygame.image.load("img"+ os.sep + self.personagem + os.sep + "morto.png").convert_alpha()
        return self.bomber

    def mudaEstado(self):
        if self.estado < 49:
            self.estado += 1
        else:
            self.estado = 0
    def verifica_bombas(self):
        copia = self.bombas_soltas[:]
        for tempo_bomba in copia:
            diferenca = datetime.now() - tempo_bomba
            if diferenca.seconds >= 3:
                self.bombas_soltas.remove(tempo_bomba)
    def permite_bomba(self):
        return self.qntidade_bombas > len(self.bombas_soltas)
        

    def soltaBomba(self,tempo):
        if len(self.bombas_soltas) <= self.qntidade_bombas:
            self.bombas_soltas.append(tempo)
            
    def morrer(self,tempo):
        som = pygame.mixer.Sound("sounds" + os.sep + "player_die.wav")
        som.play()
        self.tempo_morte = tempo
        self.vidas -= 1
        self.vivo = False
    def verificaPlayer(self):
        
        if not self.vivo:
            diferenca = datetime.now() - self.tempo_morte
            if diferenca.seconds >= 2:
                self.vivo = True
                
                self.rectPlayer.x = self.posicaox = self.posicx_reset
                self.rectPlayer.y = self.posicaoy = self.posicy_reset+10
                    
        return self.vivo
    
            
                
    def setDirecao(self,direcao):
        if direcao != self.direcao:
            self.estado = 0
        self.direcao = direcao
    def getPosicao(self):
        return self.posicaox,self.posicaoy
    def getRectPlayer(self):
        return self.rectPlayer
    def getRectPosic(self):
        return self.rectPos
    def getVidas(self):
        return self.vidas
    def mover(self, move_x, move_y, paredes,bombas,destrutiveis):
                if self.opcao == 2:
                    if self.direcao == 1:
                        diferencay = 25
                        
                    else:
                        diferencay = 15
                    diferencax = 5
                else:
                    diferencay = 27
                    diferencax = 5
                self.rectPlayer.x += move_x
                self.rectPlayer.y += move_y
                
                self.posicaox = self.rectPlayer.x
                self.posicaoy = self.rectPlayer.y-10

                self.rectPos.x = self.rectPlayer.x + self.width_player/2
                self.rectPos.y = self.rectPlayer.y + self.height_player/2
                for parede in paredes:					
                    if self.rectPlayer.colliderect(parede):
                        if move_x > 0:
			    self.rectPlayer.right = parede.left
			    
			if move_x < 0:
			    self.rectPlayer.left = parede.right
			    self.posicaox += 5
			if move_y > 0:
			    self.rectPlayer.bottom = parede.top
			    self.posicaoy -= 3
			if move_y < 0:
                            self.rectPlayer.top = parede.bottom
                        
                        
			break
		
                for destrutivel in destrutiveis:					
                    if self.rectPlayer.colliderect(destrutivel):
                        if move_x > 0:
			    self.rectPlayer.right = destrutivel.left
			    
			if move_x < 0:
			    self.rectPlayer.left = destrutivel.right
			    self.posicaox += 5
			if move_y > 0:
			    self.rectPlayer.bottom = destrutivel.top
			    self.posicaoy -= 3
			if move_y < 0:
                            self.rectPlayer.top = destrutivel.bottom
                        
                        
			break

                
                for bomba in bombas:
                    
                    if self.rectPlayer.colliderect(bomba):
			if (bomba.x-26 <= self.rectPlayer.x <= bomba.x+26):
			    pass
			else:
                            if self.rectPlayer.x > bomba.x:
                                self.rectPlayer.right = self.rectPlayer.right+self.speed
    			    elif self.rectPlayer.x < bomba.x:
                                self.rectPlayer.right = self.rectPlayer.right-self.speed
			if (bomba.y-26 <= self.rectPlayer.y <= bomba.y+26):
			    pass
			else:
			    if self.rectPlayer.y > bomba.y:
				self.rectPlayer.bottom = self.rectPlayer.bottom+self.speed
			    elif self.rectPlayer.y < bomba.y:
				self.rectPlayer.bottom = self.rectPlayer.bottom-self.speed    
		    
                        
                        
                        
    


    
